﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using VRA.Dto;
using VRA.BusinessLayer;

namespace ViewRidgeAssistant
{
    /// <summary>
    /// Логика взаимодействия для AppMainWindow.xaml
    /// </summary>
    public partial class AppMainWindow : Window
    {
        private string status; // устанавливает с какой таблицей в текущий момент работает юзер

        public AppMainWindow()
        {
            InitializeComponent();
        }

        private void Image_ImageFailed(object sender, ExceptionRoutedEventArgs e)
        {

        }

#region TablesButtonClick
        private void btCustomer_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {
               
                case "Artist": this.dgArtists.Visibility = Visibility.Hidden; 
                break;

                case "Work": this.dgWork.Visibility = Visibility.Hidden; 
                break;

                case "Trans": this.dgTrans.Visibility = Visibility.Hidden;
                break;

                case "Interests": this.dgInterests.Visibility = Visibility.Hidden; this.btnAdd.IsEnabled = true; this.btnDelete.IsEnabled = true; this.btnEdit.IsEnabled = true;
                break;

                //default: this.dgCustomer.Visibility = Visibility.Visible;
               // status = "Customer"; break;
            }
            
            this.dgCustomer.Visibility = Visibility.Visible;
            this.statusLabel.Visibility = Visibility.Visible;
            this.statusLabel.Content = " Таблица Клиенты";
            status = "Customer";
            
            this.btnRefresh_Click(sender, e);
        }

        private void btArtists_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {

                case "Customer": this.dgCustomer.Visibility = Visibility.Hidden;
                    break;

                case "Work": this.dgWork.Visibility = Visibility.Hidden;
                    break;

                case "Trans": this.dgTrans.Visibility = Visibility.Hidden;
                    break;
                case "Interests": this.dgInterests.Visibility = Visibility.Hidden; this.btnAdd.IsEnabled = true; this.btnDelete.IsEnabled = true; this.btnEdit.IsEnabled = true;
                    break;
               
            }
            this.dgArtists.Visibility = Visibility.Visible;
            status = "Artist";
            this.btnRefresh_Click(sender, e);
            this.statusLabel.Visibility = Visibility.Visible;
            this.statusLabel.Content = " Таблица Художники";
        }

        private void btWork_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {

                case "Artist": this.dgArtists.Visibility = Visibility.Hidden;
                    break;

                case "Customer": this.dgCustomer.Visibility = Visibility.Hidden;
                    break;

                case "Trans": this.dgTrans.Visibility = Visibility.Hidden;
                    break;
                case "Interests": this.dgInterests.Visibility = Visibility.Hidden; this.btnAdd.IsEnabled = true; this.btnDelete.IsEnabled = true; this.btnEdit.IsEnabled = true;
                    break;
                
            }
            this.dgWork.Visibility = Visibility.Visible;
            status = "Work";
            this.statusLabel.Visibility = Visibility.Visible;
            this.statusLabel.Content = "Таблица Работы";
            this.btnRefresh_Click(sender, e);
        }

        private void btTrans_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {

                case "Artist": this.dgArtists.Visibility = Visibility.Hidden;
                    break;

                case "Customer": this.dgCustomer.Visibility = Visibility.Hidden;
                    break;

                case "Work": this.dgWork.Visibility = Visibility.Hidden;
                    break;

                case "Interests": this.dgInterests.Visibility = Visibility.Hidden; this.btnAdd.IsEnabled = true; this.btnDelete.IsEnabled = true; this.btnEdit.IsEnabled = true;
                    break;
            }
            this.dgTrans.Visibility = Visibility.Visible;
            status = "Trans";
            this.btnRefresh_Click(sender, e);
            this.statusLabel.Visibility = Visibility.Visible;
            this.statusLabel.Content = "Таблица Транзакции";
        }
 #endregion;

#region ActionButtonsClick
        private void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {
                case "Artist": this.btnAddA_Click();
                    break;

                case "Work": this.btnAddW_Click();
                    break;

                case "Trans": this.btnAddT_Click();
                    break;

                case "Customer": this.btnAddC_Click();
                    break;

                default: MessageBox.Show("Необходимо выбрать таблицу, в которую добавляется элемент!"); return;
            }
        }

        private void btnEdit_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {
                case "Artist": this.btnEditA_Click();
                    break;

                case "Work": this.btnEditW_Click();
                    break;

                case "Trans": this.btnEditT_Click();
                    break;

                case "Customer": this.btnEditC_Click();
                    break;

                default: MessageBox.Show("Необходимо выбрать таблицу  и элемент для редактирования !"); return;
            }
        }

        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {
                case "Artist": this.btnDeleteA_Click();
                    break;

                case "Work": this.btnDeleteW_Click();
                    break;

                case "Trans": this.btnDeleteT_Click();
                    break;

                case "Customer": this.btnDeleteC_Click();
                    break;

                default: MessageBox.Show("Необходимо выбрать таблицу  и элемент для удаления !"); return;
            }

        }

        private void btnRefresh_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {
                case "Artist": this.btnReloadA_Click();
                    break;

                case "Work": this.btnReloadW_Click();
                    break;

                case "Trans": this.btnReloadT_Click();
                    break;

                case "Customer": this.btnReloadC_Click();
                    break;

                case "Interests": this.btnReloadI_Click(); 
                break;

                default: MessageBox.Show("Необходимо выбрать таблицу для обновления !"); return;
            }
        }

        private void btnReloadI_Click()
        {
            this.dgInterests.ItemsSource = ProcessFactory.GetInterestsProcess().GetList();
        }
        #endregion;


#region Artist
        private void btnAddA_Click()
        {
            AddArtistWindow window = new AddArtistWindow();
            window.ShowDialog();

            //Получаем список художников
            IList<ArtistDto> items = ProcessFactory.GetArtistProcess().GetList();
            //Передаем этот список таблице на отображение
            dgArtists.ItemsSource = items;

        }

        private void btnDeleteA_Click()
        {
            //Получаем выделенную строку с объектом художника
            ArtistDto item = dgArtists.SelectedItem as ArtistDto;
            //если там не художник или пользователь ничего не выбрал сообщаем об этом
            if (item == null)
            {
                MessageBox.Show("Выберите запись для удаления", "Удаление художника");
                return;
            }
            //Просим подтвердить удаление
            MessageBoxResult result = MessageBox.Show("Удалить художника " + item.Name + "?",
                       "Удаление художника", MessageBoxButton.YesNo, MessageBoxImage.Warning);
            //Если пользователь не подтвердил, выходим
            if (result != MessageBoxResult.Yes)
                return;
            //Если все проверки пройдены и подтверждение получено, удаляем художника
            ProcessFactory.GetArtistProcess().Delete(item.Id);
            //И перезагружаем список художников
            btnReloadA_Click();

        }

        private void btnReloadA_Click()
        {
            //Получаем список художников и передаем его на отображение таблице
            dgArtists.ItemsSource = ProcessFactory.GetArtistProcess().GetList();


        }

        private void btnEditA_Click()
        {
            //Получаем выделенную строку с объектом художника
            ArtistDto item = dgArtists.SelectedItem as ArtistDto;
            //если там не художник или пользователь ничего не выбрал сообщаем об этом
            if (item == null)
            {
                MessageBox.Show("Выберите запись для редактирования", "Редактирование");
                return;
            }

            //Создаём окно
            AddArtistWindow window = new AddArtistWindow();
            //Передаём объект на редактирование
            window.Load(item);
            //Отображаем окно с данными
            window.ShowDialog();
            //Перезагружаем список объектов
            btnReloadA_Click();


        }

        #endregion

#region Customer

        private void btnAddC_Click()
        {
            AddCustomerWindow window = new AddCustomerWindow();
            window.ShowDialog();
            dgCustomer.ItemsSource = ProcessFactory.GetCustomerProcess().GetList();
        }

        private void btnEditC_Click()
        {
            CustomerDto item = dgCustomer.SelectedItem as CustomerDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для редактирования", "Редактирование клиента");
                return;
            }

            //Создаём окно
            AddCustomerWindow window = new AddCustomerWindow();
            //Передаём объект на редактирование
            window.Load(item);
            //Отображаем окно с данными
            window.ShowDialog();
            //Перезагружаем список объектов

            btnReloadC_Click();


        }

        private void btnReloadC_Click()
        {
            dgCustomer.ItemsSource = ProcessFactory.GetCustomerProcess().GetList();
        }

        private void btnDeleteC_Click()
        {

            CustomerDto item = dgCustomer.SelectedItem as CustomerDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для удаления", "Удаление клиента");
                return;
            }

            MessageBoxResult result = MessageBox.Show("Удалить клиента " + item.Name + "?",
               "Удаление клиента", MessageBoxButton.YesNo, MessageBoxImage.Warning);

            //Если пользователь не подтвердил, выходим
            if (result != MessageBoxResult.Yes)
                return;


            ProcessFactory.GetCustomerProcess().Delete(item.Id);

            btnReloadC_Click();



        }
        #endregion;

#region Work
        private void btnAddW_Click()
        {
            AddWorkWindow window = new AddWorkWindow();
            window.ShowDialog();

            dgWork.ItemsSource = ProcessFactory.GetWorkProcess().GetList();
        }

        private void btnEditW_Click()
        {
            WorkDto item = dgWork.SelectedItem as WorkDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для редактирования", "Редактирование");
                return;
            }

            AddWorkWindow window = new AddWorkWindow();
            window.Load(item);
            window.ShowDialog();
            btnReloadW_Click();


        }

        private void btnReloadW_Click()
        {
            dgWork.ItemsSource = ProcessFactory.GetWorkProcess().GetList();
        }

        private void btnDeleteW_Click()
        {
            //Получаем выделенную строку с объектом 
            WorkDto item = dgWork.SelectedItem as WorkDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для удаления", "Удаление картины");
                return;
            }

            //Просим подтвердить удаление
            MessageBoxResult result = MessageBox.Show("Удалить картину " + item.Title + "?",
                       "Удаление картины", MessageBoxButton.YesNo, MessageBoxImage.Warning);
            //Если пользователь не подтвердил, выходим
            if (result != MessageBoxResult.Yes)
                return;

            //Если все проверки пройдены и подтверждение получено, удаляем
            ProcessFactory.GetWorkProcess().Delete(item.Id);

            btnReloadW_Click();

        }

        #endregion;

#region Transaction
        private void btnAddT_Click()
        {
            AddTransactionWindow window = new AddTransactionWindow();
            window.ShowDialog();
            dgTrans.ItemsSource = ProcessFactory.GetTransactionProcess().GetList();
        }

        private void btnEditT_Click()
        {
            TransactionDto item = this.dgTrans.SelectedItem as TransactionDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для редактирования", "Изменение транзакции");
                return;
            }

            AddTransactionWindow window = new AddTransactionWindow();
            window.Load(item);
            window.ShowDialog();
            btnReloadT_Click();

        }

        private void btnReloadT_Click()
        {
            dgTrans.ItemsSource = ProcessFactory.GetTransactionProcess().GetList();
        }

        private void btnDeleteT_Click()
        {
            TransactionDto item = this.dgTrans.SelectedItem as TransactionDto;

            if (item == null)
            {
                MessageBox.Show("Выберите запись для удаления", "Удаление транзакции");
                return;
            }

            MessageBoxResult result = MessageBox.Show("Удалить Транзакцию " + item.TransactionID + "?",
               "Удаление транзакции", MessageBoxButton.YesNo, MessageBoxImage.Warning);

            if (result != MessageBoxResult.Yes)
                return;

            ProcessFactory.GetTransactionProcess().Delete(item.TransactionID);

            btnReloadT_Click();

        }
        #endregion;

        private void Image_ImageFailed_1(object sender, ExceptionRoutedEventArgs e)
        {

        }

        private void btInterests_Click(object sender, RoutedEventArgs e)
        {
            switch (status)
            {

                case "Artist": this.dgArtists.Visibility = Visibility.Hidden;
                    break;

                case "Customer": this.dgCustomer.Visibility = Visibility.Hidden;
                    break;

                case "Work": this.dgWork.Visibility = Visibility.Hidden;
                    break;

                case "Trans": this.dgTrans.Visibility = Visibility.Hidden;
                    break;
            }

            this.dgInterests.Visibility = Visibility.Visible;
            status = "Interests";
            this.btnRefresh_Click(sender, e);
            this.btnAdd.IsEnabled = false;
            this.btnDelete.IsEnabled = false;
            this.btnEdit.IsEnabled = false;
            this.statusLabel.Visibility = Visibility.Visible;
            this.statusLabel.Content = " Представление интересы клиентов";
        }

        
        private void Database_Click(object sender, RoutedEventArgs e)
        {
            SettingsWindow window = new SettingsWindow();
            window.ShowDialog();
        }

      
    }
}
